iT邦幫忙

DAY 17
3

C# Web 開發 跳到 Java Web開發系列 第 14

JSP - 隱藏物件和相關設定

  • 分享至 

  • xImage
  •  

在JSP頁面裡面有一些隱藏的物件。這些物件是jsp提供給你讓你能夠做到像在Servlet裡面一樣的事情,而我們這篇會個字介紹一下這些隱藏物件的作用和用法。

jsp像Servlet一樣,因此還記得我們在Servlet需要設定對應的route,而jsp預設是可以不用設定在web.xml裡面。可是,如果今天你希望透過設定的方式來設置 jsp頁面,這個也是可以的。

(和我部落格同時發佈:http://www.dotblogs.com.tw/alantsai/archive/2013/10/09/jsp-setting_and_availableobjects.aspx
隱藏物件
jsp總共有9個隱藏物件。這邊我會一個一個介紹,不過詳細內容,例如有什麽方法就需要你自己在有用到的時候去查詢。我這邊提供的是一個方向,讓你在查詢的時候更方便。

9個物件的名稱分別是:

1.out
2.request
3.response
4.config
5.page
6.session
7.application
8.pageContext
9.exception

out
看到out這一個大家應該馬上就想到我們在Servlet要輸出的時候所取得的那個out。沒錯,這邊的out是javax.servlet.jsp.JspWriter的object,而它主要的作用就是讓我們在Scriptlet裡面可以輸出內容到畫面上面。那些靜態內容,其實就和你在Scriptlet呼叫out輸出沒有兩樣。

request
這個和Servlet一樣,request通常放入的是我們從客戶端接受到的內容。例如取得這個request的Session(request.getSession()),取得QueryString(getParameter) ,getAttribute等等。

request是javax.servlet.ServletRequest的object。

response
response也和Servlet一樣,主要是處理返回資訊相關。例如設定cookie,取得out的對象,設定response的http status code等。

response是javax.servlet.ServletResponse的object。

config
我們稍後會提到如何把jsp設定到web.xml裡面,就像設定Servlet一樣。而還記得Servlet有預設參數,jsp也有。因此透過confg能夠取得init parameter,而我們也可以透過config取得ServletContext。

config屬於javax.Servlet.ServletConfig class。

page
page其實代表著就是目前這個jsp頁面的object。可以把它想像成this的關鍵字。

session
就如同名字一樣,session是用來存取此使用者的Session。他和request.getSession()取得是一樣的,只不過有一個object方便操作。

還記得我們之前說的page directive element。裡面有一個參數叫做session。如果設為false,就不會有session這個隱藏物件。

session是javax.Servlet.http.HttpSession

application
application就是我們在Servlet裡面用getServletContext()取得的object。而透過他,我們可以取得web.xml裡面的context param。

application屬於javax.Servlet.ServletContext。

page屬於javax.Servlet.jsp.HttpJspPage

pageContext
pageContext代表著這一整個jsp頁面的context。他的主要目的是提供一個單一的api(pageContext)讓開發者可以取得所有這一個page相關的,不管是request,session 等。同時它能夠一次搜索4個scope(page、request、session和application)的內容(使用pageContext.getAttribute())。

它屬於javax.Servlet.jsp.PageContext。

exception
還記得我們再講page directive element的時候有提到一個叫做isErrorPage的attribute。假設某一頁是設為true,那麼他就會有exception這個隱藏物件。

exception就會存放別的頁面exception沒有接住以後導入這一頁的內容,這樣就可以顯示friendly message和做一些記錄。

設定jsp
我們可以同Servlet一樣的方式設定jsp頁面的連接,同時jsp也有提供用來專門設定jsp頁面的element在web.xml裡面。

設定jsp的url
同Servlet一樣,只不過這次<Servlet-Class>變成<jsp-file>:

<servlet>     
 <servlet-name>jsp</servlet-name>      
 <jsp-file>/HelloWorld.jsp</jsp-file>     
 <init-param>         
    <param-name>default</param-name>         
    <param-value>this is a default value</param-value>     
 </init-param> 
</servlet>   

<servlet-mapping>     
  <servlet-name>jsp</servlet-name>     
  <url-pattern>/jsp.html</url-pattern> 
 </servlet-mapping> 

這邊注意到,我們現在可以用我們定義的url pattern來看到這一個jsp,同時也可以用原來的url讀到。

<jsp-config>element
jsp-config 提供了一種批次設定jsp的辦法。

在jsp-config裡面總共有兩個子element:

1.<taglib> - 設定自己定義的tag的tld位置
2.<jsp-property-group> - 批次設定jsp頁面的一些設定

<taglib>
還記得我們在taglib directive element提到可以自定義taglib嗎?這個設定就是讓我們把自己定義的taglib取一個uri和指定那個taglib的位置。

注意:在jsp2.0之後的container(例如Tomcat 5.5之後),這個設定不是必須的。因為現在Tomcat會自動去WEB-INF下面找對應的taglib。

這個下面總共有兩個子element,一個是<taglib-uri> -用來定義我們在jsp頁面用taglib directive element 加入我們自己的taglib所輸入uri的位置, <taglib-location>放taglib(*.tlb)的位置。

範例:

web.xml: <jsp-config>    
          <taglib>         
          <taglib-uri>myTag</taglib-uri >        
          <taglib-location>/WEB-INF/tlds/sample.tld</taglib-location>     
          </taglib> 
      </jsp-config>   
jsp: 
<%@ taglib prefix="c" uri="myTag"  %> 

<jsp-property-group>
這邊主要是有一個 <url-pattern> -輸入想要設定的jsp對應,然後做一些相關設定,範例如下:

<jsp-config>     
<jsp-property-group>         
<url-pattern>*.jsp </url-pattern>   <!-- 受影響的jsp頁面。這邊是所有的jsp -->        
<el-ignored>true</el-ignored>       <!-- 是否忽略el -->        
<page-encoding>utf-8</page-encoding><!-- 預設頁面encoding -->        <scripting-invalid>true</scripting-invalid><!-- 是否忽略scriptlet -->       
 <include-prelude>header.jspf</include-prelude><!-- 在jsp前加入此頁 - 同等 include -->        
<include-coda>footer.jspf</include-coda><!-- 在jsp後加入此頁 - 同等 include -->    
</jsp-property-group> 
</jsp-config> 

這邊都有用注解解釋每一個的作用。需要注意的是這邊不是所有的選項,詳細還要看相關文件。

結語
這一篇屬於補全jsp一些之前沒有提到的東西,希望透過這一篇對於jsp的使用能夠更得心應手。


上一篇
JSP - Expression Language (EL)
下一篇
[Servlet] Filter - 強大的關卡控管人
系列文
C# Web 開發 跳到 Java Web開發27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言